package com.hmy.finance.bo.request;


import com.fasterxml.jackson.annotation.JsonFormat;
import com.hmy.finance.api.bo.core.request.enums.StatementTypeEnum;
import lombok.Data;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
@Validated
public class CreateStatementRequest implements Serializable {

    /**
     * 客户ID
     */
    @NotNull(message = "客户id不能为空")
    private Long customerId;

    /**
     * 客户名称（签约人2）
     */
    @NotNull(message = "客户人名称不能为空")
    private String customerName;

//    /**
//     * 客户类型:1.企业客户 2.个人客户
//     */
//    private Long customerType;

    /**
     * 客户联系人
     */
    @NotNull(message = "客户联系人id不能为空")
    private Long signatoryId;
    /**
     * 客户联系人名称（签约人1）
     */
    @NotNull(message = "客户联系人Name不能为空")
    private String signatoryName;

    /**
     * 账单类型:月结、期结、总账单
     * MONTHLY("1", "月结"),
     * PERIODIC("2", "期结"),
     * TOTAL("3", "总账单"),
     * FLEXIBLE("5","灵活账单"),
     * FREE("4", "自由账单");
     * {@link StatementTypeEnum}
     */
    @NotNull(message = "账期类型不能为空")
    private String statementType;

    /**
     * 账单开始时间
     */
    @NotNull(message = "设置账单开始时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date statementStartTime;

    /**
     * 账单结束时间
     */
    @NotNull(message = "设置账单结束时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date statementEndTime;

    /**
     * 操作类型:
     * 0.预览(只生成Excel，不保存，只返回前台)
     * 1.保存(保存账单和Excel地址)
     * 2.客户签署(保存账单和Excel地址、并驱动产生合同)
     */
    @NotNull(message = "账单操作类型不能为空")
    private Integer actionType;

    @NotNull(message = "请选择是否在账单Excel中展示进场运费")
    private Boolean displayEntryShippingFee2Excel = Boolean.TRUE;

    @NotNull(message = "请选择是否在账单Excel中展示改装运费")
    private Boolean displayModificationFee2Excel = Boolean.TRUE;

    /**
     * 账单备注
     */
    private String mark;

    /**
     * 设备信息
     */
    @Valid
    @NotEmpty(message = "账单设备信息不能为空")
    private List<CreateStatementDeviceRequest> deviceDetails;

}
